<?php
/**
 * 验证码生成类
 * @author Cary Cui <36086383@qq.com>
 * @copyright (c) 2013-03, 崔俊涛
 * @version V1.0
 *
 * 说明：采用读数据流的方式，读出一张图片，然后直接显示
 */
class ExtendsYspVerifyCode {

    //验证码COOKIE调用的名称
    private $verify_name;
    //图片绝对地址
    private $img_path;
    //随机数值
    private $verify_num;

    /**
     * 同一个域名下多次使用该验证码，应该使用不同的名称，即$verify_name的值尽量不一致就不会发生冲突现象
     * @param type $domain 生效域名
     * @param string $verify_name 验证码存在session中的名称
     * @param string $verify_time 是否验证时间，true为验证，默认不验证
     */
    function __construct($domain, $verify_name = 'code', $verify_time = false) {
        $this->verify_name = $verify_name;
        $this->img_path = YSP_ROOT_BASE . '/extends/getimgcode/';
        //制作验证码
        $this->getRand($domain, $verify_time);
    }

    /**
     * 生成图像
     */
    public function getAuthImage() {
        header("Content-type: image/jpeg");
        $im = imagecreatefromjpeg($this->img_path . $this->verify_num . '.jpg');
        imagejpeg($im, NULL, 100);
        imagedestroy($im);
    }

    /**
     * 随机数
     */
    private function getRand($domain,$verify_time) {
        //随机数，可以增加，与$imgCode的元素数量要保持一致
        $this->verify_num = rand(1, 16);

        //验证码数组，上面的rand中的最大值不能超过该数组的下标
        $imgCode = array(
            1 => 'RXJD',
            2 => '2UYH',
            3 => '5HBH',
            4 => '5MDU',
            5 => '6PY3',
            6 => '6UGA',
            7 => '7UXC',
            8 => '8QA2',
            9 => 'BVEM',
            10 => '9ZD4',
            11 => '46Q5',
            12 => 'AHUH',
            13 => 'AKPM',
            14 => 'AZDZ',
            15 => 'B3BH',
            16 => 'B9SK'
        );

        $_SESSION[$this->verify_name] = $imgCode[$this->verify_num];
        if ($verify_time === false) {
            $cookie_value = $imgCode[$this->verify_num];
        } else {
            $cookie_value = $imgCode[$this->verify_num] . '-' . time();
        }
        BaseYspCookie::setCookieInfo($this->verify_name, $cookie_value, time() + 1800, '/', $domain);
    }

}
